package com.uade.empresasdistribuidas.dao;

import java.util.List;

import org.hibernate.Query;

import com.uade.empresasdistribuidas.entities.VehiculoDTO;

public class VehiculoDAOImpl extends GenericHibernateDAO<VehiculoDTO, Integer>
		implements VehiculoDAO {

	private static final String EN_SUCURSAL = "EN_SUCURSAL";

	@Override
	public List<VehiculoDTO> findVehiculosActivosEnSucursal(
			String sucursalNombre, boolean refrigerado, Float peso) {
		Query query;
		if (refrigerado) {
			query = getSession()
					.createQuery(
							"Select vehiculo from  VehiculoDTO "
									+ "vehiculo join vehiculo.sucursal  suc where suc.nombre=:sucursalNombre and vehiculo.estado=:estado and vehiculo.refrigerado=:refrigerado"
									+ " and vehiculo.libre=:libre and vehiculo.peso+vehiculo.tara>=:peso")
					.setString("sucursalNombre", sucursalNombre)
					.setString("estado", EN_SUCURSAL)
					.setBoolean("refrigerado", refrigerado)
					.setBoolean("libre", true).setFloat("peso", peso);
		} else {
			query = getSession()
					.createQuery(
							"Select vehiculo from  VehiculoDTO "
									+ "vehiculo join vehiculo.sucursal  suc where suc.nombre=:sucursalNombre and vehiculo.estado=:estado "
									+ " and vehiculo.libre=:libre and vehiculo.peso+vehiculo.tara>=:peso")
					.setString("sucursalNombre", sucursalNombre)
					.setString("estado", EN_SUCURSAL).setBoolean("libre", true)
					.setFloat("peso", peso);
		}
		List<VehiculoDTO> vehiculos = query.list();
		return vehiculos;
	}

	@Override
	public List<VehiculoDTO> findVehiculosLibresEnCiudad(String ciudadSucursal,
			boolean refrigerado, Float peso) {
		Query query;
		if (refrigerado) {
			query = getSession()
					.createQuery(
							"Select vehiculo from  VehiculoDTO "
									+ "vehiculo join vehiculo.sucursal  suc where suc.direccion.localidad=:ciudadSucursal and vehiculo.estado=:estado "
									+ "and vehiculo.refrigerado=:refrigerado and vehiculo.libre=:libre and vehiculo.peso+vehiculo.tara>=:peso")
					.setString("ciudadSucursal", ciudadSucursal)
					.setString("estado", EN_SUCURSAL)
					.setBoolean("refrigerado", refrigerado)
					.setBoolean("libre", true).setFloat("peso", peso);
		} else {
			query = getSession()
					.createQuery(
							"Select vehiculo from  VehiculoDTO "
									+ "vehiculo join vehiculo.sucursal  suc where suc.direccion.localidad=:ciudadSucursal and vehiculo.estado=:estado "
									+ " and vehiculo.libre=:libre and vehiculo.peso+vehiculo.tara>=:peso")
					.setString("ciudadSucursal", ciudadSucursal)
					.setString("estado", EN_SUCURSAL)
					.setBoolean("libre", true).setFloat("peso", peso);
		}
		List<VehiculoDTO> vehiculos = query.list();
		return vehiculos;
	}

}
